﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using Projeto.Utilidades;

namespace Projeto.Classes
{
    /*
     * Classe que contem a base de toda a conexão ao banco de dados
     * para que algum objeto realize a conexão precisa utilizar essa classe
     */
    class baseConnection
    {
        //propriedades
        //essas em qualquer conexão serao salvas
        private string stringConnection;
        private SqlConnection connection;
        public SqlCommand command;
        
        //métodos

        //configura a string de conexão
        public void loadStringConnection() 
        {
            StringBuilder myBuilder = new StringBuilder();
            myBuilder.Append(@"" + constants.DATA_SOURCE + constants.NAME_DATA_SOURCE);
            myBuilder.Append(constants.INITIAL_CATALOG + constants.NAME_INITIAL_CATALOG);
            if (constants.IS_INTEGRATED_SECURITY)
            {
                myBuilder.Append(constants.INTEGRATED_SECURITY + constants.VALUE_INTEGRATED_SECURITY);
            }
            else 
            {
                myBuilder.Append(constants.USER_ID + constants.NAME_USER_ID + constants.PASSWORD + constants.VALUE_PASSWORD);
            }
            this.stringConnection = myBuilder.ToString();
        }

        //usado para adicionar parametros ao SQLCommand do objeto
        public void addParameterToCommand(string nameParameter, object value) 
        {
            this.command.Parameters.AddWithValue(nameParameter, value);
        }

        //método usado para abrir a conexão
        public void openConnection() 
        {
            this.connection.Open();
        }
        //método usado para encerrar a conexão
        public void closeConnection()
        {
            this.connection.Close();
        }

        //método que verifica se a conexão está fechada
        public bool IsClose() 
        {
            if (this.connection.State == ConnectionState.Closed)
            {
                return true;
            }
            else 
            {
                return false;
            }
        }

        //inicia os objetos iniciais de uma movimentação do banco de dados
        public void begin(string procedureName)
        {
            this.loadStringConnection();
            this.connection = new SqlConnection(this.stringConnection);
            this.command = new SqlCommand(procedureName, this.connection);
            this.command.CommandType = CommandType.StoredProcedure;
        }
    }
}
